﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="codemonk"
    targetNamespace="http://codemonk.cn/codemonk.soya.xsd"
    elementFormDefault="qualified"
    xmlns="http://codemonk.cn/codemonk.soya.xsd"
    xmlns:mstns="http://codemonk.cn/codemonk.soya.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="document">
    <xs:complexType>
      <xs:sequence>
        <!--sheet限制-->
        <xs:element name="sheetlimit" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <!--正则限制,为空则不限制-->
            <xs:attribute name="regex" type="xs:string" use="optional"/>
          </xs:complexType>
        </xs:element>
        <!--分页-->
        <xs:element name="paging" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <!--所在列-->
            <xs:attribute name="columnindex" type="xs:int"  use="required"/>
            <!--正则分页,为空则不分页-->
            <xs:attribute name="regex" type="xs:string"  use="required"/>
          </xs:complexType>
        </xs:element>
        <!--结构-->
        <xs:element name="schemes" minOccurs="1" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="scheme" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <!--目标名称-->
                    <xs:element name="targetname" type="xs:string"/>
                    <!--规则-->
                    <xs:element name="rules">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="rule" minOccurs="1" maxOccurs="unbounded">
                            <xs:complexType >
                              <xs:sequence>
                                <!--定位-->
                                <xs:element name="location" minOccurs="1" maxOccurs="1">
                                  <xs:complexType>
                                    <!--所在列-->
                                    <xs:attribute name="columnindex" type="xs:int"  use="required"/>
                                    <!--所在行,相对于每个分页的第一行所在的位置-->
                                    <xs:attribute name="rowindex"  type="xs:int"  use="optional"/>
                                    <!--起始行-->
                                    <xs:attribute name="startrow"  type="xs:int"  use="optional"/>
                                  </xs:complexType>
                                </xs:element>
                                <!--求值-->
                                <xs:element name="evaluation" minOccurs="1" maxOccurs="1">
                                  <xs:complexType>
                                    <xs:choice>
                                      <xs:element name="simplevalue">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <!--取值正则-->
                                            <xs:element name="regex"  minOccurs="1" maxOccurs="1"/>
                                            <!--值分发-->
                                            <xs:element name="mapreduce">
                                              <xs:complexType>
                                                <xs:sequence>
                                                  <!--目标-->
                                                  <xs:element name="target" minOccurs="1" maxOccurs="unbounded">
                                                    <xs:complexType>
                                                      <!--所在组-->
                                                      <xs:attribute name="groupindex" type="xs:int" use="required"/>
                                                      <!--值类型-->
                                                      <xs:attribute name="type"   use="required">
                                                        <xs:simpleType>
                                                          <xs:restriction base="xs:string">
                                                            <xs:enumeration value="sbyte"/>
                                                            <xs:enumeration value="byte"/>
                                                            <xs:enumeration value="short"/>
                                                            <xs:enumeration value="ushort"/>
                                                            <xs:enumeration value="int"/>
                                                            <xs:enumeration value="uint"/>
                                                            <xs:enumeration value="long"/>
                                                            <xs:enumeration value="ulong"/>
                                                            <xs:enumeration value="char"/>
                                                            <xs:enumeration value="float"/>
                                                            <xs:enumeration value="double"/>
                                                            <xs:enumeration value="bool "/>
                                                            <xs:enumeration value="string"/>
                                                          </xs:restriction>
                                                        </xs:simpleType>
                                                      </xs:attribute>
                                                      <!--目标属性-->
                                                      <xs:attribute name="property" type="xs:string" use="required"/>
                                                      <!--默认值-->
                                                      <xs:attribute name="defaultvalue" type="xs:string" use="optional"/>
                                                      <!--是否可空-->
                                                      <xs:attribute name="cannull" type="xs:boolean" use="optional"/>
                                                    </xs:complexType>
                                                  </xs:element>
                                                </xs:sequence>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="complexvalue">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <!--目标名称-->
                                            <xs:element name="targetname" type="xs:string"/>
                                            <xs:element name="reference" minOccurs="1" maxOccurs="1">
                                              <xs:complexType>
                                                <!--所在列-->
                                                <xs:attribute name="columnindex" type="xs:int"  use="required"/>
                                                <!--正则-->
                                                <xs:attribute name="regex"  type="xs:string"  use="required"/>
                                              </xs:complexType>
                                            </xs:element>
                                            <xs:element name="reduce">
                                              <xs:complexType>
                                                <xs:sequence>
                                                  <!--取值正则-->
                                                  <xs:element name="regex"  minOccurs="1" maxOccurs="1"/>
                                                  <!--值分发-->
                                                  <xs:element name="mapreduce">
                                                    <xs:complexType>
                                                      <xs:sequence>
                                                        <!--目标-->
                                                        <xs:element name="target" minOccurs="1" maxOccurs="unbounded">
                                                          <xs:complexType>
                                                            <!--所在组-->
                                                            <xs:attribute name="groupindex" type="xs:int" use="required"/>
                                                            <!--值类型-->
                                                            <xs:attribute name="type"   use="required">
                                                              <xs:simpleType>
                                                                <xs:restriction base="xs:string">
                                                                  <xs:enumeration value="sbyte"/>
                                                                  <xs:enumeration value="byte"/>
                                                                  <xs:enumeration value="short"/>
                                                                  <xs:enumeration value="ushort"/>
                                                                  <xs:enumeration value="int"/>
                                                                  <xs:enumeration value="uint"/>
                                                                  <xs:enumeration value="long"/>
                                                                  <xs:enumeration value="ulong"/>
                                                                  <xs:enumeration value="char"/>
                                                                  <xs:enumeration value="float"/>
                                                                  <xs:enumeration value="double"/>
                                                                  <xs:enumeration value="bool "/>
                                                                  <xs:enumeration value="string"/>
                                                                </xs:restriction>
                                                              </xs:simpleType>
                                                            </xs:attribute>
                                                            <!--目标属性-->
                                                            <xs:attribute name="property" type="xs:string" use="required"/>
                                                            <!--默认值-->
                                                            <xs:attribute name="defaultvalue" type="xs:string" use="optional"/>
                                                            <!--是否可空-->
                                                            <xs:attribute name="cannull" type="xs:boolean" use="optional"/>
                                                          </xs:complexType>
                                                        </xs:element>
                                                      </xs:sequence>
                                                    </xs:complexType>
                                                  </xs:element>
                                                </xs:sequence>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                    </xs:choice>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>


</xs:schema>
